內容驗證


「內容驗證」功能或「應用程式簽署」可防止使用您的官方二進位檔載入未簽署的檔案。給定金鑰對後,「verified_contents.json」就是應用程式檔案的簽章。它是使用工具「sign.py」和私密金鑰(private_key.pem 檔案)建立的。公鑰會內建到 NW.js 二進位檔中。若要執行已簽署的應用程式,請在應用程式目錄中使用 nw --verify-content=enforce_strict .。它會顯示一個簡單的頁面。在下一步中,嘗試稍微修改 index.html,然後再次執行。NW 會報告檔案已損毀,並立即結束。

注意

此功能無法防止他人駭入您的應用程式並載入其他 NW 二進位檔。考慮使用 C++ 編寫部分功能,並載入 Node.js 模組、NaCl 或 使用 nwjc 將您的 JS 編譯成二進位檔

簽署應用程式

若要使用示範金鑰對簽署應用程式,請執行下列動作

  1. 變更至應用程式目錄
  2. 確定沒有 verified_contents.jsoncomputed_hashes.json(您可以直接移除它們)
  3. 執行 payload.exe;它會產生 payload.json,作為 sign.py 的輸入
  4. 執行 python sign.py > /tmp/verified_contents.json(請務必將 tmp 目的地目錄設定為非應用程式目錄)
  5. 將產生的 verified_contents.json 檔案移至應用程式目錄,即完成。

重新建置以使用您自己的金鑰對

若要使用您自己的金鑰對,您需要重新建置 NW 二進位檔。並且,預設情況下,命令列中 --verify-content= 的引數需要設定為 enforce_strict

  1. 產生您的金鑰對:openssl genrsa -out private_key.pem 2048
    (輸出檔案同時包含私鑰和公鑰)
  2. 執行 python convertkey.py;它會將公鑰轉換成 C 原始碼。
  3. 將產生的原始碼放入
    content/nw/src/nw_content_verifier_delegate.cc;取代預設金鑰。
  4. 變更命令列引數的預設值:將該檔案中第 73 行變更為
    Mode experiment_value = ContentVerifierDelegate::ENFORCE_STRICT;
  5. 建置 NW 二進位檔。

工具、範例應用程式和示範私鑰位於 tools/sign 目錄中。示範私鑰與建置在官方 NW 二進位檔中的公鑰配對。